package com.common.www.service.scheduler;

import com.common.www.service.auth.TokenService;
import com.common.www.service.file.FileService;
import com.common.www.service.global.GlobalConfigService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/**
 * @ClassName: SignedDataScheduler
 * @Auther: ljw
 * @Date: 2019/1/4 11:33
 * @Description:
 */
@Component
@Transactional
public class GlobalScheduler {

    @Autowired
    TokenService tokenService;
    @Autowired
    FileService fileService;
    @Autowired
    GlobalConfigService configService;

    /**
     * 　"0 0 12 * * ?" 每天中午12点触发
     * 　　　　"0 15 10 ? * *" 每天上午10:15触发
     * 　　　　"0 15 10 * * ?" 每天上午10:15触发
     * 　　　　"0 15 10 * * ? *" 每天上午10:15触发
     * 　　　　"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
     * 　　　　"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
     * 　　　　"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
     * 　　　　"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
     * 　　　　"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
     * 　　　　"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
     * 　　　　"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
     * 　　　　"0 15 10 15 * ?" 每月15日上午10:15触发
     * 　　　　"0 15 10 L * ?" 每月最后一日的上午10:15触发
     * 　　　　"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
     * 　　　　"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
     * 　　　　"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
     * 　　　　每天早上6点     0 6 * * *     每两个小时     0
     * <p>
     * <p>
     * 此方法每天凌晨2点触发 处理所有存量数据
     */

    /**
     * 上次token处理过的时间
     */
    private long lastTokenTime = 0;

    /**
     * 每10分钟检查一次
     */
//    @Scheduled(initialDelay = 600 * 1000L, fixedDelay = 600 * 1000L)
//    public void updateTokenTime() {
//        System.out.println("token处理开始");
//        if (System.currentTimeMillis() - lastTokenTime >= 1 * 3600 * 1000
//                || JwtUtils.lastUpdateHastmap.size() > 3000) {//每两小时处理一次或缓存已经超过3000条则直接开始处理
//            lastTokenTime = System.currentTimeMillis();
//
//            HashMap hashMap = JwtUtils.lastUpdateHastmap;
//            List<Token> tokenList = new ArrayList<>();
//            for (int i = 0; i < hashMap.size(); i++) {
//                String key = hashMap.keySet().toArray()[i].toString();
//                Long time = TxtUtil.getLong(hashMap.values().toArray()[i] + "");
//                Token token = tokenService.findToken(key);
//                if (token != null) {
//                    token.setLastUpdateTime(TimeUtils.getTimeStringByTimetamp(time));
//                    token.setLastUpdateTimetamp(time);
//                    tokenList.add(token);
//                }
//                hashMap.remove(key);
//                i--;
//            }
//
//            tokenService.save(tokenList);
//            System.out.println("token处理结束耗时 ：" + (System.currentTimeMillis() - lastTokenTime) + "  毫秒");
//        }
//
//    }

    /**
     * 每天3点15分触发
     */
    @Scheduled(cron = "0 15 3 * * ?")
    public void updateTokenTime() {
        fileService.deleteTempFiles();
    }

}
